#!/bin/bash
#=============HEADER==============================================================|
#AUTOR:
# Jefferson Rocha <lrcjefferson@gmail.com>
#
#PROGRAMA:
# Elog (Emmi Log)
#
#VERSÃO:
# 0.4
#
#LICENÇA MIT
#
#SITE:
# http://www.emmilinux.com.br
#
#DESCRIÇÃO:
# Utilitário via CLI utilizando DIALOG com muitos recursos para facilitar
# a vida do usuário!
# Este programa foi feito especialmente para Distribuição Emmi Linux, que
# tem como sua base o Debian.
# Por isso para rodar em outra distribuição deve-se adaptar,
# alguns recursos como comandos.
#
#RECURSOS:
# -Atualizar Hora com Ntpdate (Servidor1 - ntp.br, Servidor2 - 2.br.pool.ntp.org )
# -Configuração de Monitores com xrandr
# -Configuração do teclado para ABNT2
# -Editar Repositório com o editor nano
#
#NOTAS:
# -Todos arquivos texto caso precise são adicionados em /tmp/elog.txt ,
# e são excluidos logo após concluir a opção.
# A uma função para isto que se chama (log4space)
#
#
#
#
#CHANGELOG:
#
# (Versão 0.1) - Jefferson Rocha
#   -Lançamento do Software
#
# (Versão 0.2) - Jefferson Rocha
#   -Adicionado Configuração para Monitores
#
#
# (Versão 0.3) - Jefferson Rocha
#   -Adicionado configuração Teclado (ABNT2)
#
#
# (Versão 0.4) - Jefferson Rocha
#   -Adicionado Opção para editar Repositório (com editor nano)
#   -Trocado modo de chamada das funções "function por func()"
#   -Adicionado váriavel DIALOGRC para puxar configurações padrão do programa
#
#
# (Versão 1.0) - Jefferson Rocha
#   -Adicionado check para ver se ntpdate está no sistema
#   -Adicionado opções para instalação dos checks ( dialog, ntpdate )
#   -Adicionado opção para mudar/alternar de shell (fish, bash)
#   -Adicionado opção de Ajuda no menu principal
#   -Adicionado tratamento de saída 255 (ESC)
#
#=================================================================================|

#=======Váriaveis do Elog==#
name="elog"
version="1.0"
back_title="$name versão $version"
check_root=$(echo $UID)
check_dialog=$(which dialog 2>&-)
check_ntp=$(which ntpdate 2>&-)
export DIALOGRC=".dialogrc-elog" # Mudar cor
#===========FIM Váriaveis==#

#=======Funções==#
MSG_ERROR() { # Mensagem padronizada de erro.
  dialog --stdout \
         --title "Erro!" \
         --backtitle "$back_title" \
         --msgbox "\n Houve um erro :( \n" 8 25
}

KEY_OUTPUT() { # Tratamento de saídas
case $? in
   1) break ;;
   2)
    dialog --stdout \
           --title "Ajuda" \
           --backtitle "$back_title" \
           --ok-label "Voltar" \
           --msgbox "
Elog versão $version
Este mini manual tem como te ajudar a se encontrar aqui na elog.
Este software foi desenvolvido para você ter acesso fácil as principais configurações do sistema Emmi.

- Como posso navegar entre os menus?
Você pode usar o DIRECIONAL (flexinhas) do seu teclado ou simplesmente usar TAB.

- Como faço para selecionar algo? Por exemplo, alguma opção do menu principal?
Você pode usar o BACKSPACE ou o ENTER do seu teclado.

- Como posso sair do programa sem precisar ir no botão (Sair)?
Você pode apertar CTRL+C para finalizar a elog.


Se você encontrar um bug ou quer fazer alguma solicitação, envie um e-mail para <jeffersonrocha@emmilinux.com.br>

" 0 0 ;;

   255)
      dialog --stdout \
             --yes-label "Sim" --no-label "Não" \
             --yesno "Deseja Sair?" 0 0
     [ $? = "0" ] && exit 0
esac
}

log4space() {
   rm /tmp/elog.txt
}

#=======FIM Funções==#


#=======Configuração Inicial==#

# Usuário é root?
if [[ $check_root -ne 0 ]]; then
    dialog --stdout \
           --title "Erro!" \
           --backtitle "$back_title" \
           --ok-label "Ok! Já volto." \
           --msgbox "\nFavor, logar-se como root." 8 27
    clear
    exit 1
fi

# ntp está no sistema?
if [[ ! -e $check_ntp ]]; then
    dialog --stdout \
           --title "Erro!" \
           --backtitle "$back_title" \
           --ok-label "Sim, Instale." \
           --cancel-label "Não." \
           --yesno "\nNecessitas do 'ntpdate' para continuar, Deseja instalar agora?" 8 27
          if [ $? = "0" ]; then
             dialog --stdout \
                    --title "Aguarde!!!" \
                    --infobox "Instalando..." 0 0
             apt-get install ntpdate > /dev/null 2>/tmp/elog.txt
             [ $? = "0" ] && \ # Verificando se instalação nao teve erros.
               dialog --sleep 3 --infobox "Concluído" 0 0 \
             || \
               dialog --sleep 3 --title "OPS!" --infobox "Houve algum erro..." 0 0
               dialog --title "Verifique o Erro" \
                      --editbox "/tmp/elog.txt" 0 0
               log4space # Chamada Funçao (REMOVER LOG)
          else
             exit 1
          fi


fi

# Dialog está instalado no sistema?
if [[ ! -e $check_dialog ]]; then
    echo -e "\033[31;1mFavor Instalar o Dialog para prosseguir!\033[m"
    read -p "Deseja instalar agora?" option_user
    option_user_upper=${option_user,,}
    [ "$option_user" = "s" ] && apt-get install dialog
fi
#===========FIM Configurações==#



# THE FUN START HERE ;)
# Menu Principal
while : ; do
menu=$(
   dialog --stdout \
          --title "Menu Principal" \
          --backtitle "$back_title" \
          --ok-button "Executar" \
          --cancel-button "Sair" \
          --help-button \
          --help-label "Ajuda" \
          --menu "O que você deseja fazer?" \
          0 0 0 \
          Hora "Ajustar o horário" \
          Monitores "Ajuste meus Monitores" \
          Teclado "Deixe meu teclado ABNT2" \
          Repositório "Ajuste meu Repositório" \
          Shell "Troque o meu Shell por outro" )

KEY_OUTPUT # Chamada função de tratamento de saída

case $menu in

# HORA
      Hora)
         dialog --stdout \
                --title "Configuração da Hora" \
                --backtitle "$back_title" \
                --infobox "Um momento..." 0 0
         ntpdate ntp.br || ntpdate 2.br.pool.ntp.org  # Atualizar data
         if [[ $? -eq 0 ]]; then
          dialog --stdout \
                 --title "Concluído" \
                 --backtitle "$back_title" \
                 --msgbox "Concluído!" 0 0 ;sleep 3s
         else
            MSG_ERROR
         fi ;;

# MONITORES
 Monitores)
        dialog --stdout \
               --title "Configuração dos monitores" \
               --backtitle "$back_title" \
               --infobox "Aguarde..." 0 0
       xrandr > /tmp/elog.txt # Criando arquivo em tmp do Elog
        dialog --stdout \
              --exit-label "Continuar" \
              --title "Configuração dos monitores" \
              --backtitle "$back_title" \
              --textbox /tmp/elog.txt 0 0
   case $? in
       0)
         MONITOR_MAIN=$(
          dialog --stdout \
                 --title "Configuração dos monitores" \
                 --backtitle "$back_title" \
                 --inputbox "Informe o monitor principal\nExemplo: VGA-1" 0 0 )
         FILTER_M_MAIN=$(echo $MONITOR_MAIN | tr [:lower:] [:upper:]) # tudo em MAIUSCULO

        POSITION=$( # Posição do monitor!
          dialog --stdout \
                 --title "IMPORTANTE" \
                 --inputbox "Qual a posição do monitor principal?\nRight=Direita Left=Esquerda :" 0 0 )
        FILTER_POSITION=$(echo $POSITION | tr [:upper:] [:lower:] )

         MONITOR_SECONDARY=$(
          dialog --stdout \
                 --title "Configuração dos monitores" \
                 --backtitle "$back_title" \
                 --inputbox "Informe o monitor secundário:\nExemplo HDMI-1" \ 0 0 )
         FILTER_M_SECONDARY=$(echo $MONITOR_SECONDARY | tr [:lower:] [:upper:]) # tudo em MAISCULO

         # Executando comando xrandr
         xrandr --output $FILTER_M_MAIN --$FILTER_POSITION-of $FILTER_M_SECONDARY
         if [[ $? -eq 0 ]]; then
          dialog --stdout \
                 --title "Finalizado" \
                 --msgbox "Finalizado com Sucesso! :)" 0 0
          rm /tmp/elog.txt
         else
            MSG_ERROR
         fi
   esac ;;

# Teclado
 Teclado)
        dialog --stdout \
               --title "Configuração do teclado" \
               --backtitle "$back_title" \
               --infobox "Um momento!" 0 0
        setxkbmap -model pc105 -layout br -variant abnt2
        if [[ $? -eq 0 ]]; then
          dialog --stdout \
                 --title "Configuração teclado" \
                 --msgbox "Concluído!" 0 0
          echo "setxkbmap -model pc105 -layout br -variant abnt2" >> /etc/profile
        else
          MSG_ERROR
        fi ;;

# Repositório
 Repositório)
        nano /etc/apt/sources.list ;;

 Shell)
    while : ;do
        type_shell=$(
             dialog --stdout \
                    --menu "Escolha qual shell será o Padrão" \
                    0 0 0 \
                    Fish "Shell Fácil de utilizar e bem completo" \
                    Bash "Shell padrão de todas as distribuições" )
             KEY_OUTPUT  # Chamada funçao
             if [ "$type_shell" = "Fish" ]; then
                shell_fish=$(which fish)
                if [ ! -e "$shell_fish" ]; then
                    dialog --sleep 4 --infobox "Você não possue o Fish, instale e retorne." 5 42
                    break
               fi
                name=$(dialog --stdout --inputbox "Nome do seu Usuário:" 0 0)
                grep "$name" /etc/passwd >/dev/null # Usuário Existe?
                if [ $? = "1" ] || [ -z "$name" ]; then
                    dialog --title "Ops." \
                           --ok-label "Ok" \
                           --msgbox "Este usuário Não existe!" 5 30
                else
                    chsh --shell "$shell_fish" "$name"
                    chsh --shell "$shell_fish" "root"
                    dialog --sleep 4 \
                           --infobox "Concluído, reinicie sua Interface gráfica." 3 45
                    break
                fi
             else
               shell_bash=$(which bash)
               name=$(dialog --stdout --inputbox "Nome do seu Usuário:" 0 0)
               grep "$name" /etc/passwd >/dev/null # Usuário Existe?
               if [ $? = "1" ] || [ -z "$name" ]; then
                    dialog --title "Ops." \
                           --ok-label "Ok" \
                           --msgbox "Este usuário Não existe!" 5 30
               else
                    chsh --shell "$shell_bash" "$name" && \
                    chsh --shell "$shell_bash" "root"
                    dialog --sleep 4 \
                           --infobox "Concluído, reinicie sua Interface gráfica." 3 45
                    break

               fi
             fi
    done ;;





esac # Fecha case Principal
done # Fecha loop do menu
